package com.example.demo.algorithm.LRU;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

public class LURCacheDemo<K, V> extends LinkedHashMap<K, V> {
    //最近最少使用、设置有过期时间的最近最少使用
    //随机删除、设置过期时间的随机删除
    //使用频率最低的、设置有过期时间的使用评率最低的
//    volatile-ttl：从已设置过期时间的数据集中挑选将要过期的数据淘汰。
//    no-enviction（驱逐）：禁止驱逐数据，这也是默认策略。意思是当内存不足以容纳新入数据时，新写入操作就会报错，请求可以继续进行，线上任务也不能持续进行，采用no-enviction策略可以保证数据不被丢失。
    private int capacity;

    public LURCacheDemo(int capacity) {
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return super.size() > capacity;
    }

    public static void main(String[] args) {
        LURCacheDemo lruCacheDemo = new LURCacheDemo(3);
        lruCacheDemo.put(1, "a");
        lruCacheDemo.put(2, "b");
        lruCacheDemo.put(3, "c");
        System.out.println(lruCacheDemo.keySet());

    }


}
